Lake Champlain Basin Program real-time data

Matthew Vaughan

2021-08-06

Welcome

This website shows real-time data from monitoring programs in Lake Champlain and throughout the Lake Champlain Basin.

All data plots are interactive. Hover over plots to see details on each measurement, or click and drag to zoom in on a section. Additional features can be found at the top right of each plot.

This website is under development. All data is provisional and for educational purposes only.

Valcour buoy

The Valcour monitoring buoy is located in the Main Lake segment, near Valcour Island.

Latest weather conditions, recorded 2021-08-06 02:00:00

Air temperature: 19.1 degrees Celsius (66.4 degrees Fahrenheit)

Wind speed: 3.1 meters per second (6.9 miles per hour)

Wind direction: 198 degrees from North

Relative atmospheric pressure: 101.9 kilopascals (764.5 millimeters of mercury; 30.1 inches of mercury)

Weather conditions from the past 30 days:

valcour_weather_plot <- valcour_weather %>%
  filter(!(timestamp == ymd_hms("2021-07-06 03:30:00") &
           var == "wind_speed_mps")) %>% # remove erroneous value
  mutate(var = var %>%
               recode(air_temp_degC = "Air temperature (degrees Celsius)",
                      wind_speed_mps = "Wind speed (meters per second)",
                      wind_direction_deg = "Wind direction (degrees from North)",
                      rel_atm_pressure_kPa = "Relative atmospheric pressure (kilopascals)")) %>%
  ggplot() +
  geom_line(aes(x = timestamp,
                y = value,
                color = var)) +
  facet_wrap(var ~ .,
             scales = "free_y",
             ncol = 1,
             strip.position = "top") +
  scale_color_viridis(discrete = TRUE) +
  theme(legend.position = "none",
        text = element_text(face = "bold",
                                  size = 14)) +
  labs(x = "", y = "")

ggplotly(valcour_weather_plot)

Latest water temperature profile, recorded 2021-08-06 02:00:00

latest_valcour_watertemp_plot <- valcour_watertemp %>%
  filter(timestamp == latest_timestamp) %>%
  ggplot() +
  geom_line(aes(x = degC,
                y = depth_m),
            size = 1.5) +
  scale_y_reverse() +
  labs(x = "Temperature (deg C)",
       y = "Depth below water surface (m)") +
  theme(text = element_text(face = "bold",
                            size = 14))

ggplotly(latest_valcour_watertemp_plot)
# Turned off for now. 
# enter number of days to look back:
day_window <- 7

timestamp_labeller <- function(x){
  as.POSIXct(x, origin = '1970-01-01')
}

last_week_valcour_watertemp_plot <- valcour_watertemp %>%
  filter(timestamp > (latest_timestamp - duration(day_window, units = "days"))) %>%
  ggplot() +
  geom_line(aes(x = degC,
                y = depth_m,
                color = timestamp,
                group = timestamp),
            alpha = 0.4,
            size = 1) +
  scale_y_reverse() +
  scale_color_viridis(option = "magma",
                      direction = -1,
                      labels = timestamp_labeller) +
  labs(x = "Temperature (deg C)",
       y = "Depth below water surface (m)")

ggplotly(last_week_valcour_watertemp_plot)

Water temperature data from the past 30 days:

valcour_watertemp_plot <- valcour_watertemp %>%
  ggplot() +
  geom_tile(aes(x = timestamp,
                y = depth_m,
                fill = degC)) +
  scale_fill_viridis("Temperature\n(deg C)",
                     option = "plasma") +
  scale_y_reverse() +
  labs(x = "",
       y = "Depth below water surface (m)") +
  theme(text = element_text(face = "bold",
                            size = 14))

ggplotly(valcour_watertemp_plot)

Lake Champlain level

Lake level data from the past 30 days

Lake level data is shown below for four locations on Lake Champlain. Data is collected by the US Geological Survey.

Turn lake level station layers on and off by clicking them in the legend. To see data from only one lake level station, double-click its name. Double-click again to turn all layers back on.

lake_level_station_info <- "data/20210726_lake_level_station_info.csv" %>%
                 read_csv() %>%
                 mutate(gage_number = gage_number %>% # Add leading zero to all gage codes
                                      paste0("0", .)) 

lake_level_day_window <- 30

 param_code <- "62614" # Lake water surface elevation above NGVD 1929, feet
 # param_code <- "62615" # Lake water surface elevation above NAVD 1988, feet
 time_zone <- "America/New_York"

 end <- Sys.Date()
 start <-  end - duration(lake_level_day_window, units = "days")

 lake_level <- lake_level_station_info %>%
  select(c(level_station, gage_number)) %>%
  mutate(level_data = map(.x = gage_number,
                     .f = ~readNWISuv(siteNumber = .x,
                                      startDate = start,
                                      endDate = end,
                                      parameterCd = param_code,
                                      tz = time_zone) %>%
                           rename(timestamp = dateTime,
                                 elevation_ft = X_62614_00000) %>%
                           select(c(timestamp,
                                    elevation_ft)))) %>%
   unnest(level_data)

 lake_level_together <- lake_level %>%
   mutate(level_station = level_station %>%
                 fct_reorder2(timestamp, elevation_ft)) %>%
    ggplot() +
    geom_line(aes(x = timestamp,
                  y = elevation_ft,
                  color = level_station),
              size = 1,
              alpha = 0.5) +
    scale_color_viridis("Level station",
                        discrete = TRUE) + 
   scale_y_continuous(breaks = pretty_breaks()) +
   scale_x_datetime(breaks = pretty_breaks()) +
   labs(x = "",
        y = "Lake water surface elevation\n(feet above NGVD 1929)") +
   theme(axis.text = element_text(face = "bold",
                            size = 14),
         axis.title = element_text(face = "bold",
                            size = 14),
         legend.text = element_text(face = "bold",
                                    size = 10))
  
ggplotly(lake_level_together) 

Lake Champlain tributaries

Discharge data from the past 30 days

Discharge (volume of water per time) data is shown below for 16 major tributaries of Lake Champlain. Data is collected by the US Geological Survey.

Turn tributary layers on and off by clicking them in the legend. To see data from only one tributary, double-click its name. Double-click again to turn all layers back on.

trib_station_info <- "data/20210723_trib_station_info.csv" %>%
                 read_csv() %>%
                 mutate(gage_number = gage_number %>% # Add leading zero to all gage codes
                                      paste0("0", .)) 

trib_day_window <- 30

 param_code <- "00060" # discharge in cfs
 time_zone <- "America/New_York"

 end <- Sys.Date()
 start <-  end - duration(trib_day_window, units = "days")

 tribq <- trib_station_info %>%
  select(c(trib, gage_number)) %>%
  mutate(qdata = map(.x = gage_number,
                     .f = ~readNWISuv(siteNumber = .x,
                                      startDate = start,
                                      endDate = end,
                                      parameterCd = param_code,
                                      tz = time_zone) %>%
                           rename(timestamp = dateTime,
                                              discharge_cfs = X_00060_00000) %>%
                           mutate(discharge_cms = discharge_cfs * 0.0283168) %>%
                           select(c(timestamp,
                                     discharge_cms)))) %>%
   unnest(qdata)

 tribq_together <- tribq %>%
   mutate(trib = trib %>%
                 fct_reorder2(timestamp, discharge_cms)) %>%
    ggplot() +
    geom_line(aes(x = timestamp,
                  y = discharge_cms,
                  color = trib),
              size = 1,
              alpha = 0.5) +
    scale_color_viridis("Tributary",
                        discrete = TRUE) + 
   labs(x = "",
        y = "Discharge (cubic meters per second)") +
   theme(axis.text = element_text(face = "bold",
                            size = 14),
         axis.title = element_text(face = "bold",
                            size = 14),
         legend.text = element_text(face = "bold",
                                    size = 10))
  
ggplotly(tribq_together)

More information

Lake Champlain monitoring buoys are supported by the Lake Champlain Basin Program, in partnership with New York and Vermont Departments of Environmental Conservation and SUNY Plattsburgh.

Two additional buoys will be deployed in Lake Champlain and added to this website later in 2021.

Please contact Matthew Vaughan for more information.